Increasingly, financial and other sensitive transactions are being performed by personal computers. This has increased the need for secure storage of data. Modem cryptography techniques are often used to protect such data from unauthorized access.
New security methods, however, have brought about a need to store and protect "core" data secrets, such as private cryptographic keys, credit card numbers, and other small pieces of secret data. Presently, this responsibility is left to individual application programs or to personal computer users themselves. Although programs are available that allow users to encrypt and store data, such programs cannot typically be used by other application programs. Currently, each application program has to devise a safe and secure method to store such data.
As an example of the problems associated with the current state of the art, consider the issues involved in exploiting smart card technologies. A smart card is particularly well suited as a receptacle for core data secrets such as those described above. In addition, smart cards can be used to authenticate users by requiring each user to insert his or her personal smart card into a receptacle associated with the user's personal computer. Tamper-proof smart cards have been designed for just these purposes.
Problems arise without agreed-upon standards for using such devices. Although a developer could provide capabilities for working with a limited number of smart cards, it would be difficult or impossible to anticipate all the different variations that might eventually arise. This fact makes it impractical to implement smart card technology in various different applications.
Although some storage media such as magnetic hard disks do not present the challenges of smart cards, many software developers simply do not have the background and knowledge required to safely implement modern cryptographic techniques. Even if they did, it would be inefficient for each developer to undertake the complex task of developing a method of storing core secrets. Furthermore, resulting solutions would be incompatible. It would be much more preferable to adopt a common scheme for storing such data, and to avoid having to implement a new solution for every different application program.